package tcp;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.HashMap;

/**
 * Created with IDEA
 * author:ju bai
 * Date:2021/4/15
 * Time:20:48
 **/
public class TCPServerByCN {

    /**
     * 英译汉服务器
     */

    // 端口号
    private static final int port = 9003;

    // 翻译字典
    static HashMap<String, String> dirMap = new HashMap<>();

    static {
        dirMap.put("hello", "你好");
        dirMap.put("dog", "狗");
        dirMap.put("cat", "猫");
    }

    public static void main(String[] args) throws IOException {
        // 1.创建 TCP 服务器端
        ServerSocket serverSocket = new ServerSocket(port);
        System.out.println("已启动服务器端");

        // 2.等待客户端连接
        Socket socket = serverSocket.accept();
        System.out.println(String.format("已有客户端连接，IP：%s，Port:%d",
                socket.getInetAddress().getHostAddress(),
                socket.getPort()));

        // 执行到此行，说明已经有客户端连接
        // 3.创建读、写对象
        try (BufferedWriter writer = new BufferedWriter(
                new OutputStreamWriter(socket.getOutputStream()));
             BufferedReader reader = new BufferedReader(
                     new InputStreamReader(socket.getInputStream()))
        ) {
            while (true) {
                // 4.获取到待翻译的英文内容
                String en = reader.readLine();
                if (en != null && !en.equals("")) {
                    // 5.将英文翻译成中文
                    String cn = processData2(en);
                    // 6.将翻译结果返回给客户端
                    writer.write(cn + "\n");
                    writer.flush();
                }
            }
        }
    }

    // 英译汉实现方法 1
    private static String processData(String en) {
        String cn = "未知";
        switch (en) {
            case "hello":
                cn = "你好";
                break;
            case "dog":
                cn = "狗";
                break;
            case "cat":
                cn = "猫";
                break;
            default:
                cn = "未知";
                break;
        }
        return cn;
    }

    // 英译汉实现方法 2
    private static String processData2(String en) {
        String cn = null;
        cn = dirMap.get(en);
        return cn == null ? "未知" : cn;
    }

    // todo:英译汉最终版：JDBC
    // -> 爬虫将所有的中英文对照信息添加到你的数据库 |
    // 然后通过 TCP 服务器端实现翻译和展示
}
